#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
// 摄像头 - begin ===========================
#include <QCamera>              // 摄像头
#include <QCameraInfo>          // 摄像头详细信息
#include <QVideoProbe>          // 视频
#include <QVideoWidget>         // 视频显示窗口
#include <QCameraImageCapture>  // 拍照
// 摄像头 - end =============================
#include <QDebug>
#include <QPaintEvent>
#include <QPainter>
#include <QMouseEvent>


QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

    void paintEvent(QPaintEvent *e);
    void mousePressEvent(QMouseEvent* e);
    void mouseReleaseEvent(QMouseEvent* e);


public slots:
    void slotOnProbeFrame(const QVideoFrame &frame);
    void slotChangeDevice(int index);
    void slotChangeResolution(int index);

    void slot_zoom_in();
    void slot_zoom_out();
    void slot_rotate();
    void slot_horizontal(int);
    void slot_vertical(int);
    void slot_crop(int);
    void slot_scan();


private:
    Ui::Widget *ui;

    // 需要用到的一些参数
    int m_resolution_width = 0;    // 分辨率宽度
    int m_resolution_height = 0;   // 分辨率高度
    QImage m_img;                  // 视频帧，全局图像
    int m_rotate = 0;              // 旋转角度
    bool m_horizontal = false;     // 水平镜像
    bool m_vertical = false;       // 垂直镜像
    double m_scaled = 1.0;         // 缩放
    bool m_kuangxuan_state = false;// 框选状态
    QRect m_kuangxuan;             // 框选矩形位置


    QCamera *dev = nullptr;        // 摄像头
    QVideoProbe *video = nullptr;  // 视频
    QList<QCameraInfo> dev_list;   // 摄像头列表
    QList<QSize> resolution_list;  // 分辨率列表

    QList<QCameraInfo> getDeviceList();                                                 // 获取摄像头列表
    QString getDeviceFullInfo(QList<QCameraInfo> *device_list, int device_index);       // 获取摄像头完整信息
    QString getDeviceName(QList<QCameraInfo> *device_list, int device_index);           // 获取摄像头名称
    QList<QSize> getResolutionList(QCamera *device);                                    // 获取分辨率列表（降序）
    int getResolutionWidth(QList<QSize> *resolution_list, int index);                   // 获取分辨率宽度
    int getResolutionHeight(QList<QSize> *resolution_list, int index);                  // 获取分辨率高度
    QString getResolutionQString(QList<QSize> *resolution_list, int index, QString join="x"); // 获取分辨率字符串，例：“800x600”
};
#endif // WIDGET_H
